5 kyu
給 RGB 三個十進位的數字,轉換成十六進位的 Hex。
根據題目給的 Examples,input 跟 output 可能有:
255, 255, 255 --> "FFFFFF"
255, 255, 300 --> "FFFFFF"
0, 0, 0 --> "000000"
148, 0, 211 --> "9400D3"
傳入的三個參數不一定會在 RGB 的範圍內,也就是說要做的事有:
if(num > 255) num = 255
if(num < 0) "00"
return "0" + num.toString(16)
function rgb(r, g, b) {
function trans(num) {
if (num > 255) num = 255;
if (num <= 0) return "00";
num = num.toString(16).toUpperCase();
return num.length < 2 ? "0" + num : num;
}
return trans(r) + trans(g) + trans(b);
}
宣告一個函數 trans,在 rgb 函數之中調用,參數 num 帶入的是 rgb。
如果 num > 255
則 num = 255
;如果小於等於 0,則直接返回 “00”
。
調用 toString(16)
,並且轉換為大寫字母;用三元表達式決定是否拼接字串:
如果轉換之後的字串長度小於 2,拼接一個 ”0” 在前面,否則就直接返回 num。
最後返回拼接 rgb 三個的執行結果。
最佳解答與我的解法類似,因此跳過。
其實一直有嘗試解 4 kyu 的題目,
但⋯⋯4 跟 5 之間絕對有無法跨越之壁吧!!
難度相差懸殊,考慮到還是以練習為目的,就先暫時沒有越級打怪了。
但因為 CodeWars 的自由度高,題目來自四面八方,其實難度的評級沒有很公平。
還蠻常看到解題之後的討論區,覺得評級有問題的。